iT邦幫忙

3

Go語言 range 與 map 統計:初學者也能懂的小應用

  • 分享至 

  • xImage
  •  

想像你開了一家小雜貨店:

  • 客人來進貨清單是 [蘋果, 香蕉, 香蕉, 蘋果, 蘋果, 葡萄]
  • 你需要統計每種水果有幾個,而不是只是一次次看到「蘋果」、「香蕉」。

這時候你要的是一張「水果 → 數量」的對照表:

蘋果 3
香蕉 2
葡萄 1

用程式怎麼做到呢?這就是我們今天要用 Go 語言來解的問題。

很多初學者第一次看到這段 Go 語法時會很疑惑:

for _, n := range arr {
count[n]++
}

這到底在做什麼?

  • range arr:依序走訪陣列裡的每個元素
  • n:每次迴圈暫存「當前元素的值」
  • count[n]++:把 n 當作 key,在 map 裡的數字加一

3. map 怎麼幫我們記錄?
在程式裡,我們會這樣寫:

arr := []string{"蘋果", "香蕉", "香蕉", "蘋果", "蘋果", "葡萄"}
count := make(map[string]int)  // key 是水果名稱,value 是數量

for _, item := range arr {
count[item]++
}
  • count 一開始是空的
  • 每跑一次迴圈,就把這個水果數量加一
  • 跑完之後:

count = {"蘋果":3, "香蕉":2, "葡萄":1}

不用自己記水果名稱,map 自己就是「名稱 → 數量」的記錄本!

4. 為什麼不用直接 range count ?

因為一開始 count 是空的,還沒任何數據可讀。

  • 先用 range arr → 統計數量,填資料進 map
  • 再用 range count → 印出結果

5. 怎麼印出「名稱 - 數量」表?

for name, qty := range count {
fmt.Println(name, qty)
}

輸出:

蘋果 3
香蕉 2
葡萄 1

6. 完整範例程式

package main

import "fmt"

func main() {
// 客人進貨清單
arr := []string{"蘋果", "香蕉", "香蕉", "蘋果", "蘋果", "葡萄"}

// 建立一個 map 記錄水果數量
count := make(map[string]int)

// 1. 統計數量
for _, item := range arr {
    count[item]++
}

// 2. 印出水果名稱和數量
fmt.Println("商品 數量")
for name, qty := range count {
    fmt.Println(name, qty)
}

}

執行結果:

商品 數量
蘋果 3
香蕉 2
葡萄 1

7. 小結

  • range arr → 一個一個讀取清單項目
  • count[item]++ → map 幫你累加數量
  • range count → 讀出「名稱-數量」對照表
  • 變數 n(或 item)只是暫時存值,真正的記錄是 map

https://ithelp.ithome.com.tw/upload/images/20250819/20178183x1Yddwqviy.jpg


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言